package com.dljd.javase.t3;

import java.util.Random;
import java.util.Scanner;

/*
这是循环结构的案例代码
 */
public class XunhuanDemo {

    //1输出0(包含)到100(包含)之间的数, 分别以递增和递减的方式实现；
    public static void test1(){
        for(int n=0;n<=100;n++){
            System.out.println(n);
        }
        for(int n=100;n>=0;n--){
            System.out.println(n);
        }
        System.out.println("后续其他代码");
    }
    //2.输出1到100之间的奇数和偶数；
    public static void test2(){
        //先输出1-100之间的奇数
        for(int n=1;n<=100;n++){
           if(n%2!=0){
               System.out.print(n+",");
           }
        }
        System.out.println();
        //先输出1-100之间的偶数
        for(int n=1;n<=100;n++){
            if(n%2==0){
                System.out.print(n+",");
            }
        }
    }

    //3、输入一个正整数n，计算1+2+3+…+n的和；
    public static void test3(){
        Scanner  s=new Scanner(System.in);
        int num;
        int sum=0;//求和的变量
        System.out.println("请输入一个数字");
        num=s.nextInt();
        for(int n=1;n<=num;n++){
            sum=sum+n;
        }
        System.out.println("1-"+num+"的和："+sum);
    }

    //while语法演示
    public static void whileDemo(){
        int age=20;
        while(age<40){//死循环(无限循环)
            System.out.println("年轻人");
            age++;
        }
        System.out.println(age);
    }
    //do-while语法演示
    public static void dowhileDemo(){
        int age=20;
        do{
            System.out.println("年轻人");
            age++;
        } while(age>40);
    }
    //break的作用是终止这个循环的后续所有循环次数
    public static void breakDemo(){
        //求1-10000之间的自然后累加，当累加的值大于等于500000的时候终止
        int sum=0;
        for(int n=1;n<10000;n++){
            if(sum>=500000)
            {
                System.out.println("1累加到"+n+"的时候结果已经大于500000");
                break;
            }
            sum+=n;
            System.out.println("加"+n);
        }
    }

    //continue的作用是终止该循环的本次循环的后续代码，继续执行下一次循环
    public static void continueDemo(){
        //计算1-100之间的奇数和
        int sum=0;
        for(int n=1;n<=100;n++){
            if(n%2==0){
                continue;//遇到continue指的是跳出本次循环的后续代码，执行下一次循环
            }
            sum+=n;
            System.out.println("加上了"+n);
        }
        System.out.println("1-100之间的奇数和:"+sum);
    }
    //带标签的break和continue的用法
    public static void labelDemo(){
        int speed=0;//250
        ENGINE:for(int n=0;n<1000;n++){
            speed+=2;
            if(speed>=250)
            {
                continue ENGINE;
            }
            for(int m=0;m<3;m++){
                speed+=1;
                if(speed>=250)
                {
                    continue ENGINE;
                }
            }
        }
    }
    //使用continue实现输出1到100之间能被5整除的数。
    public static void test8(){

        for(int n=1;n<=100;n++){


            if(n%5!=0){
                continue;//终止本次循环的后续代码执行，跳出去执行下一次
            }
            System.out.println(n+"能被5整除");


        }
    }

    //2、韩信点兵(n)，三人一组余两人，五人一组余三人，七人一组余四人，请问最少需要多少士兵。
    public static void test9(){
        //推算法，循环推算法n=1,n=2,n=3
        //用哪个循环合适？（for，while，do-while）
        int n=1;
        while(true){
            if((n%3==2)&&(n%5==3)&&(n%7==4)){
                System.out.println("最少需要"+n+"个士兵，满足条件！");
                break;//当找到合适当数量当时候终止循环
            }
            n++;//继续试下一个
        }
    }
    //用循环打印矩形
    public static void test10(){
       for(int hang=1;hang<=5;hang++){
           for(int xing=1;xing<=8;xing++){
               System.out.print("*");
           }

           System.out.println();

       }
    }

    //用循环打印平行四边形
    public static void test11(){
        for(int hang=1;hang<=5;hang++){

            //这里是打印空格的循环
            for(int kong=1;kong<=5-hang;kong++){
                System.out.print(" ");
            }
            //这里是打印星星的循环
            for(int xing=1;xing<=8;xing++){
                System.out.print("*");
            }
            //一行内容打印完毕之后，输出一个换行符
            System.out.println();

        }
    }
    //用循环打印等腰三角形
    public static void test12(){
        for(int hang=1;hang<=5;hang++){
            //这里是打印空格的循环
            for(int kong=1;kong<=5-hang;kong++){
                System.out.print(" ");
            }
            //这里是打印星星的循环
            for(int xing=1;xing<=hang*2-1;xing++){
                System.out.print("*");
            }
            //一行内容打印完毕之后，输出一个换行符
            System.out.println();

        }

    }

    //用循环打印九九乘法口诀表
    public static void test13(){
       for(int n=1;n<=9;n++){
           for(int m=1;m<=n;m++){
               System.out.print(m+"*"+n+"="+(n*m)+"  ");
           }
           System.out.println();
       }

    }

    //循环中break的意义在可以提前终止循环
    //break只能用在循环中或者swtich中
    //循环中的continue作用是跳出本次循环继续执行下一次。
     public static void testBreak(){
        int sum=0;


       A: for(int m=10;m<100;m++) {
            for (int n = 0; n < 100; n++) {
                sum += n;

                if (sum >= 500) {
                    break A;
                }
                System.out.println(sum);
            }

            System.out.println("aaa");
        }
         System.out.println("其他代码");
     }


     //for循环有三个表达式，他的使用场景适合那种固定次数的循环使用
    //for循环的三个表达式可以省略，全部都可以省略
    public static void testFor(){
//        int num=10;
//        for(;;){//三个表达式都不写的话，而且循环中没有终止条件的话，称为死循环
//            System.out.println("for");
//            if(++num>20){
//                break;
//            }
//        }

        int n=0;
        for(;;){

            if(n>=10)break;
            System.out.println(n);
            n++;
        }
    }
    //java程序中如果代码中定义了死循环，则死循环的后面再书写代码是无意义的，语法会报错。
    //方法中return出现的地方，后续不能再有代码，因为return是终止方法的意思，后续代码不会执行，无意义

    //break关键字是终止循环或者终止switch，所以break后面不能直接书写代码，因为不会执行，无意义。





    //4.判断一个数是否是素数。
    public static void testNum(){

        Scanner s=new Scanner(System.in);
        int num=0;
        System.out.println("请输入一个数字:");
        num=s.nextInt();
        boolean isSushu=true;
        for(int n=2;n<num;n++){
            if(num%n==0){
                System.out.println("他不是一个素数！");
                isSushu=false;
                break;
            }
        }
        if(isSushu) {
            System.out.println("他是一个素数");
        }
    }

    //判断1-100之间有多少个素数并输出所有素数。（将判断一个数是否是素数的功能提取成方法，在循环中直接调用即可）
    public static void testSuzhu100(){
        A:for(int n=1;n<=100;n++){//定义一个外循环，从1-100开始循环，准备依次测试1-100这些数字，哪个是素数

            for(int m=2;m<n;m++){//定义一个内循环，从2-（n-1）循环，依次让外循环的n来除以这个循环里面的每个m，测试是否能除尽

                if(n%m==0){//循环里面用判断语法判断当前n能否除尽这个m，如果除尽了，说明当前的m是n的一个公因数

                    continue A;//如果除尽说明n不是一个素数，执行continue，直接执行外循环下一轮。
                }
            }
            System.out.print(n+",");//如果上面这个内循环执行完了，还没有跳过，说明，当前的这个n没有一个公因数，则他肯定是一个素数，打印出这个数
        }
    }

    //输入三个班，每班10个学生的成绩，求和并求平均分
    public static void testScore(){
        Scanner  s=new Scanner(System.in);
        int[] scores1=new int[10];
        int[] scores2=new int[10];
        int[] scores3=new int[10];

        for(int n=0;n<scores1.length;n++){
            System.out.println("请输入第一个班级的第"+(n+1)+"学生的成绩:");
            scores1[n]=s.nextInt();
        }
        for(int n=0;n<scores2.length;n++){
            System.out.println("请输入第二个班级的第"+(n+1)+"学生的成绩:");
            scores2[n]=s.nextInt();
        }
        for(int n=0;n<scores3.length;n++){
            System.out.println("请输入第三个班级的第"+(n+1)+"学生的成绩:");
            scores3[n]=s.nextInt();
        }

        int  sum1=0;
        for (int n=0;n<scores1.length;n++){
            sum1+=scores1[n];
        }
        int  sum2=0;
        for (int n=0;n<scores2.length;n++){
            sum2+=scores2[n];
        }
        int  sum3=0;
        for (int n=0;n<scores3.length;n++){
            sum3+=scores3[n];
        }

        System.out.println("总分:"+(sum1+sum2+sum3));
        System.out.println("平均分:"+(sum1+sum2+sum3)/(scores1.length+scores2.length+scores3.length));

    }


    //书写一个程序，把一个十进制的数字转换成2进制输出

    public static void covertNum(){
        Scanner s=new Scanner(System.in);
        int num=0;
        System.out.println("请输入一个数字:");
        num=s.nextInt();
        int yu=0;
        int shang=0;
        String erjinzhi="";
        while(true){
            shang=num/2;
            yu=num%2;
            erjinzhi=yu+erjinzhi;
            num=shang;
            if(num==1){
                erjinzhi="1"+erjinzhi;
                break;
            }
        }
        System.out.println(erjinzhi);
    }
    public static void main(String[] args) {
//        test3();
       // dowhileDemo();
        //testBreak();
        testScore();


    }
}
